package com.malou.client.reportes;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.store.StoreListener;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.Status;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.SpinnerField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.menu.AdapterMenuItem;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.ui.RootPanel;
import com.malou.client.MalouConstants;
import com.malou.client.ventas.tipocliente.TipoClientes;
import com.malou.client.ventas.ubigeo.Pais;
import com.malou.client.ventas.ubigeo.Ubigeos;

public class ReportePrendasVendidas_Cliente extends ContentPanel{
	private Button find;
	private Status status;
	private Button print;
	private Button excel;
	private Button mail;
	private Status status_xls;
	private ContentPanel hidePanel;
	private EnviarCorreoDialog sendCorreo;
	private ComboBox<BeanModel> tipocliente;
	public ComboBox<BeanModel> departamento;
	public ComboBox<BeanModel> provincia;
	public ComboBox<BeanModel> distrito;
	private ComboBox<Pais> paises;
	private ListStore<Pais> storepais;
	private MalouConstants constants = GWT.create(MalouConstants.class);
	private ToolBar toolBar;
	private SpinnerField txtYear;
	private Button mnuFiltro;
	
	@SuppressWarnings("deprecation")
	public ReportePrendasVendidas_Cliente() {
		super();
		setLayout(new FitLayout());
		setIcon(IconHelper.createPath("images/icons/table.png"));
		setHeading("Reporte de clientes");
		setBodyBorder(false);
		setBorders(false);

		storepais = new ListStore<Pais>();
		Ubigeos.reporteprendasvendidascliente = this;
		Ubigeos.getComboPaisReportePredasVendidasCliente();
		
		Integer year = (1900 + new Date().getYear());

		toolBar = new ToolBar();
		toolBar .setBorders(false);
		mnuFiltro = new Button("Busqueda por ubigeos",
				IconHelper.createPath("images/icons/filter.gif"));

		txtYear = new SpinnerField();
		txtYear.setWidth(70);
		txtYear.setIncrement(Integer.valueOf(1));
		txtYear.getPropertyEditor().setType(Integer.class);
		txtYear.getPropertyEditor().setFormat(NumberFormat.getFormat("0000"));
		txtYear.setValue(year);
		txtYear.setMinValue(2000);

		TipoClientes.getComboTipoCliente();
		TipoClientes.loaderCombo.load();
		tipocliente = new ComboBox<BeanModel>();
		tipocliente.setDisplayField("descripcion");
		tipocliente.setWidth(150);
		tipocliente.setStore(TipoClientes.storeCombo);
		tipocliente.setTypeAhead(true);
		tipocliente.setTriggerAction(TriggerAction.ALL);
		tipocliente.setValueField("descripcion");
		tipocliente.setUseQueryCache(false);
		tipocliente.setAllowBlank(true);
		tipocliente.setMinChars(0);
		tipocliente.getStore().addStoreListener(new StoreListener<BeanModel>() {
			public void storeDataChanged(StoreEvent<BeanModel> se) {
				super.storeDataChanged(se);
				List<BeanModel> list = new ArrayList<BeanModel>();
				list.add(TipoClientes.storeCombo.getAt(0));
				tipocliente.setSelection(list);
				
			}
		});
		
		tipocliente.addSelectionChangedListener(new SelectionChangedListener<BeanModel>() {
			@Override
			public void selectionChanged(SelectionChangedEvent<BeanModel> se) {
			loadReporte();
			}
		});


		paises = new ComboBox<Pais>();
		paises.setEmptyText("Seleccione pais...");
		paises.setDisplayField("pais");
		paises.setStore(storepais);
		paises.setTypeAhead(true);
		paises.setTriggerAction(TriggerAction.ALL);
		paises.setUseQueryCache(true);
		paises.addSelectionChangedListener(new SelectionChangedListener<Pais>() {
			@Override
			public void selectionChanged(SelectionChangedEvent<Pais> se) {
				if (se.getSelectedItem() != null) {
					String codigo = se.getSelectedItem().get("codigo");
					
					if (codigo.trim().equals("PE")) {
						departamento.setEnabled(true);
					} else {
						departamento.setEnabled(false);
						provincia.setEnabled(false);
						distrito.setEnabled(false);
						limpiar();
					}
                     
					loadReporte();
				}

			}
		});

		
		
		Ubigeos.getComboDepartamento();

		departamento = new ComboBox<BeanModel>();
		departamento.setDisplayField("departamento");
		departamento.setEmptyText("Seleccione departamento...");
		departamento.setEnabled(false);
		departamento.setStore(Ubigeos.storedepartamento);
		departamento.setTriggerAction(TriggerAction.ALL);
		departamento.setValueField("departamento");
		departamento.setUseQueryCache(true);
		departamento.setMinChars(0);
		departamento.getStore().addStoreListener(
				new StoreListener<BeanModel>() {
					public void storeDataChanged(StoreEvent<BeanModel> se) {
						departamento.getStore().filter("departamento",
								departamento.getRawValue());
					}
				});
		
		
		departamento
				.addSelectionChangedListener(new SelectionChangedListener<BeanModel>() {
					@Override
					public void selectionChanged(
							SelectionChangedEvent<BeanModel> se) {

						if (se.getSelectedItem() != null) {
							String dep = se.getSelectedItem().get(
									"departamento");
							Ubigeos.departamento = dep;
							provincia.clearSelections();
							distrito.clearSelections();
							provincia.setEnabled(true);
							distrito.setEnabled(false);
							loadReporte();

						} else {
							provincia.setEnabled(false);
							distrito.setEnabled(false);

						}
					}
				});
		
		departamento.addListener(Events.Expand, new Listener<BaseEvent>() {
			@Override
			public void handleEvent(BaseEvent be) {
				departamento.clearSelections();
			}

		});

		Ubigeos.getComboProvincia();
		provincia = new ComboBox<BeanModel>();
		provincia.setDisplayField("provincia");
		provincia.setEmptyText("Seleccione provincia...");
		provincia.setEnabled(false);
		provincia.setStore(Ubigeos.storeprovincia);
		provincia.setTypeAhead(true);
		provincia.setTriggerAction(TriggerAction.ALL);
		provincia.setValueField("provincia");
		provincia.setUseQueryCache(false);
		provincia.setMinChars(0);
		provincia.getStore().addStoreListener(new StoreListener<BeanModel>() {
			public void storeDataChanged(StoreEvent<BeanModel> se) {
				provincia.getStore().filter("provincia",
						provincia.getRawValue());
			}
		});
		provincia	.addSelectionChangedListener(new SelectionChangedListener<BeanModel>() {
					@Override
					public void selectionChanged(
							SelectionChangedEvent<BeanModel> se) {
						if (se.getSelectedItem() != null) {
							String pro = se.getSelectedItem().get("provincia");
							Ubigeos.provincia = pro;
							distrito.clearSelections();
							distrito.setEnabled(true);
							loadReporte();
						} else
							distrito.setEnabled(false);

					}
				});
		provincia.addListener(Events.Expand, new Listener<BaseEvent>() {
			@Override
			public void handleEvent(BaseEvent be) {
				provincia.clearSelections();
			}

		});
		Ubigeos.getComboDistrito();

		distrito = new ComboBox<BeanModel>();
		distrito.setDisplayField("distrito");
		distrito.setEmptyText("Seleccione distrito...");
		distrito.setEnabled(false);
		distrito.setStore(Ubigeos.storedistrito);
		distrito.setTypeAhead(true);
		distrito.setTriggerAction(TriggerAction.ALL);
		distrito.setValueField("distrito");
		distrito.setUseQueryCache(false);
		distrito.setMinChars(0);
		distrito.getStore().addStoreListener(new StoreListener<BeanModel>() {
			public void storeDataChanged(StoreEvent<BeanModel> se) {
				distrito.getStore().filter("distrito", distrito.getRawValue());
			}
		});
		distrito.addSelectionChangedListener(new SelectionChangedListener<BeanModel>() {
			@Override
			public void selectionChanged(
					SelectionChangedEvent<BeanModel> se) {
			loadReporte();
			}
		});
		distrito.addListener(Events.Expand, new Listener<BaseEvent>() {
			@Override
			public void handleEvent(BaseEvent be) {
				distrito.clearSelections();
			}

		});
		
		AdapterMenuItem mnupais = new AdapterMenuItem(paises);
		mnupais.setManageFocus(true);
		mnupais.setCanActivate(true);
		mnupais.setTitle("Pais");

		AdapterMenuItem mnudepartamento = new AdapterMenuItem(departamento);
		mnudepartamento.setManageFocus(true);
		mnudepartamento.setCanActivate(true);
		mnudepartamento.setTitle("Departamento");

		AdapterMenuItem mnuprovincia = new AdapterMenuItem(provincia);
		mnuprovincia.setManageFocus(true);
		mnuprovincia.setCanActivate(true);
		mnuprovincia.setTitle("Provincia");

		AdapterMenuItem mnudistrito = new AdapterMenuItem(distrito);
		mnudistrito.setManageFocus(true);
		mnudistrito.setCanActivate(true);
		mnudistrito.setTitle("Distrito");

		Menu menu = new Menu();
		menu.add(mnupais);
		menu.add(new SeparatorMenuItem());
		menu.add(mnudepartamento);
		menu.add(new SeparatorMenuItem());
		menu.add(mnuprovincia);
		menu.add(new SeparatorMenuItem());
		menu.add(mnudistrito);
		menu.add(new SeparatorMenuItem());

		mnuFiltro.setMenu(menu);
		
	
		print = new Button(constants.imprimir(),
				IconHelper.createPath("images/icons/print.png"));
		print.setStyleAttribute("paddingLeft", "20px");
		print.setEnabled(false);
		print.setVisible(false);

		status_xls = new Status();
		status_xls.setBusy(constants.cargando());
		status_xls.hide();
		status_xls.setAutoWidth(true);
		status_xls.setStyleAttribute("paddingLeft", "20px");
	

		excel = new Button(constants.exportToXls(),
				IconHelper.createPath("images/icons/excel.png"));
		excel.setStyleAttribute("paddingLeft", "20px");
		excel.addSelectionListener(new SelectionListener<ButtonEvent>() {

			@Override
			public void componentSelected(ButtonEvent ce) {
				status_xls.show();
				excel.hide();
				hidePanel.removeAll();
				
				
				HashMap<String, Object> param = new HashMap<String, Object>();
				if (tipocliente.getValue() != null) 
					param.put("tipocliente_id", tipocliente.getValue().get("id"));
				
				if (paises.getValue() != null) 
					param.put("pais", paises.getValue().get("pais"));
				
				if (departamento.getValue() != null) 
					param.put("departamento", departamento.getValue().get("departamento"));
				
				if (provincia.getValue() != null) 
					param.put("provincia", provincia.getValue().get("provincia"));
				
				if (distrito.getValue() != null) 
					param.put("distrito", distrito.getValue().get("distrito"));
				
				    param.put("annio", txtYear.getValue().intValue());
												
				XlsReportDownload reportViewer = new XlsReportDownload("reports/prendavendidacliente", param, status_xls, excel, null);
									
				hidePanel.add(reportViewer);
				hidePanel.layout();
			}
		});

		sendCorreo = new EnviarCorreoDialog();
		mail = new Button(constants.enviarCorreo(),
				IconHelper.createPath("images/icons/mail.png"));
		mail.setStyleAttribute("paddingLeft", "20px");
		mail.addSelectionListener(new SelectionListener<ButtonEvent>() {
			@Override
			public void componentSelected(ButtonEvent ce) {
				sendCorreo.reset();
				sendCorreo.rptPVCliente = ReportePrendasVendidas_Cliente.this;
				sendCorreo.show();
			}
		});
		
		find = new Button(constants.find(),
				IconHelper.createPath("images/icons/find.png"));
		find.addSelectionListener(new SelectionListener<ButtonEvent>() {

			@Override
			public void componentSelected(ButtonEvent ce) {
			loadReporte();
				
			}
		});
		
		Label lbannio = new Label("A&ntilde;o:");
		lbannio.setStyleAttribute("marginLeft", "10px");
		lbannio.setStyleAttribute("paddingRight", "3px");

		Label lbcliente = new Label("Tipo Cliente:");
		lbcliente.setStyleAttribute("marginLeft", "10px");
		lbcliente.setStyleAttribute("paddingRight", "3px");


		toolBar.add(lbannio);
		toolBar.add(txtYear);
		toolBar.add(lbcliente);
		toolBar.add(tipocliente);
		toolBar.add(mnuFiltro);
		toolBar.add(find);
		toolBar.add(excel);
		toolBar.add(mail);
		toolBar.add(status_xls);
		
		 if(hidePanel!= null)
		        hidePanel.removeFromParent();
		        hidePanel= new ContentPanel();        
		        hidePanel.setVisible(false);        
		        RootPanel.get().add(hidePanel);
		
		
		
		setTopComponent(toolBar);

	}

	protected void loadReporte() {
	
		removeAll();
		HashMap<String, Object> param = new HashMap<String, Object>();
		String cad = validarCampos();
		PdfReportViewer reportViewer=null;
		
		if (tipocliente.getValue() != null) 
			param.put("tipocliente_id", tipocliente.getValue().get("id"));
		
		if (paises.getValue() != null) 
			param.put("pais", paises.getValue().get("pais"));
		
		if (departamento.getValue() != null) 
			param.put("departamento", departamento.getValue().get("departamento"));
		
		if (provincia.getValue() != null) 
			param.put("provincia", provincia.getValue().get("provincia"));
		
		if (distrito.getValue() != null) 
			param.put("distrito", distrito.getValue().get("distrito"));
		
		    param.put("annio", txtYear.getValue().intValue());
		  
		System.out.println("annio = "+txtYear.getValue().intValue());
		
		if(cad.equals("padeprdi")){
		   reportViewer = new PdfReportViewer("reports/prendavendidacliente_padeprdi", param, status, find, print,null);
		}
		
		if(cad.equals("padepr")){
		   reportViewer = new PdfReportViewer("reports/prendavendidacliente_padepr", param, status, find, print,null);
		}   
			
		if(cad.equals("pade")){
		   reportViewer = new PdfReportViewer("reports/prendavendidacliente_pade", param, status, find, print,null);
		}   
			
		if(cad.equals("pa")){
		   reportViewer = new PdfReportViewer("reports/prendavendidacliente", param, status, find, print,null);
		}   
			
		reportViewer.setBorders(false);
		reportViewer.setBodyBorder(false);
		
		add(reportViewer);
		layout();
		
	}

	public void enviarEmail(EnviarCorreo send) {
		send.setSubject(constants.prendasvendidas());

		HashMap<String, Object> param = new HashMap<String, Object>();
		param.put("tipocliente_id", tipocliente.getValue().get("id"));

		Reportes.correoDialog = sendCorreo;

		Reportes.enviarEmail("reports/prendavendidacliente", param, send, null);
	}

	public void limpiar() {
		provincia.clearSelections();
		departamento.clearSelections();
		distrito.clearSelections();
	}

	public void setListaPais(List<Pais> list) {
		storepais.add(list);
		paises.setValue(paises.getStore().getAt(175));
	}
	
	public String validarCampos(){
		boolean pa=false;
		boolean de=false;
		boolean pr=false;
		boolean di=false;
		
		String cadena = "";
		
		if(paises.getValue() != null)
			pa=true;
		
		if(departamento.getValue() != null)
			de=true;
		
		if(provincia.getValue() != null)
			pr=true;
		
		if(distrito.getValue() != null)
			di=true;
	
		if(pa&&de&&pr&&di)
		  cadena = "padeprdi";
		
		if(pa&&de&&pr&&!di)
		  cadena = "padepr";

		if(pa&&de&&!pr&&!di)
		  cadena = "pade";

		if(pa&&!de&&!pr&&!di)
		  cadena = "pa";
		
			
		return cadena;
	}

}	